﻿Imports System.ComponentModel
Imports System.Windows.Forms
Imports System.Drawing.Drawing2D

Public Class PTIC_GroupBox
    Inherits System.Windows.Forms.GroupBox

    'Private Const WM_ERASEBKGND = &H14
    Private _borderColor As Color
    'Requise par le Concepteur Windows Form
    Private components As System.ComponentModel.IContainer


    Public Sub New()

        'MyBase.New()
        InitializeComponent()
        SetStyle(ControlStyles.ResizeRedraw, True)
        SetStyle(ControlStyles.ContainerControl, True)
        'Activation de la transparence
        SetStyle(ControlStyles.SupportsTransparentBackColor, True)
        'SetStyle(ControlStyles.Opaque, True)

        'Activation du double buffering
        SetStyle(ControlStyles.UserPaint, True)
        SetStyle(ControlStyles.AllPaintingInWmPaint, True)
        SetStyle(ControlStyles.OptimizedDoubleBuffer, True)

        Me.BorderColor = Color.Black

    End Sub

    Public Property BorderColor() As Color
        Get
            Return Me._borderColor
        End Get
        Set(ByVal value As Color)
            Me._borderColor = value
        End Set
    End Property

    Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams
        Get
            Dim cp As CreateParams = MyBase.CreateParams
            cp.ExStyle = cp.ExStyle Or &H20
            Return cp
        End Get
    End Property

    Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)

        'Taille en largeur du texte du groupBox
        Dim tsize As Size = TextRenderer.MeasureText(Me.Text, Me.Font)

        'Définition de la zone à encadrer
        Dim rectClient As Rectangle = e.ClipRectangle
        rectClient.Y = (rectClient.Y + (tsize.Height / 2))
        rectClient.Height = (rectClient.Height - (tsize.Height / 2))

        'Définition de la zone contenant le texte
        Dim textRect As RectangleF = e.ClipRectangle
        textRect.X = (textRect.X + 6)
        textRect.Width = tsize.Width
        textRect.Height = tsize.Height

        'Dessin des bordures
        Dim lpen As New Pen(Me._borderColor, 1)
        'Haut
        e.Graphics.DrawLine(lpen, rectClient.X, rectClient.Y, textRect.X, rectClient.Y)
        e.Graphics.DrawLine(lpen, textRect.X + textRect.Width, rectClient.Y, rectClient.X + rectClient.Width, rectClient.Y)
        'Bas/gauche/droite
        e.Graphics.DrawLine(lpen, rectClient.X, rectClient.Y, rectClient.X, rectClient.Y + rectClient.Height)
        e.Graphics.DrawLine(lpen, rectClient.X, rectClient.Y + rectClient.Height - 1, rectClient.X + rectClient.Width - 1, rectClient.Y + rectClient.Height - 1)
        e.Graphics.DrawLine(lpen, rectClient.X + rectClient.Width - 1, rectClient.Y, rectClient.X + rectClient.Width - 1, rectClient.Y + rectClient.Height - 1)

        'Dessin du texte
        e.Graphics.DrawString(Me.Text, Me.Font, New SolidBrush(Me.ForeColor), textRect.X, textRect.Y)

    End Sub


    'UserControl remplace la méthode Dispose pour nettoyer la liste des composants.
    <System.Diagnostics.DebuggerNonUserCode()> _
    Protected Overrides Sub Dispose(ByVal disposing As Boolean)
        Try
            If disposing AndAlso components IsNot Nothing Then
                components.Dispose()
            End If
        Finally
            MyBase.Dispose(disposing)
        End Try
    End Sub

    'REMARQUE : la procédure suivante est requise par le Concepteur Windows Form
    'Elle peut être modifiée à l'aide du Concepteur Windows Form.  
    'Ne la modifiez pas à l'aide de l'éditeur de code.
    <System.Diagnostics.DebuggerStepThrough()> _
    Private Sub InitializeComponent()
        components = New System.ComponentModel.Container()
    End Sub


End Class
